{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这个作业中，我们使用tensorflow来实现一个简单的手写数字识别的网络，并用这个网络来做个 简单的识别示例。\n",
    "\n",
    "本作业中，需要参与者应用视频中学到的知识：dropout，learingratedecay，初始化等等，将网络最终在validation数据上的得分尽可能的提高。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 首先导入一些用到的库。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "E:\\Anaconda3\\lib\\site-packages\\h5py\\__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n",
      "  from ._conv import register_converters as _register_converters\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "tf.logging.set_verbosity(tf.logging.INFO)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 先来看看数据长什么样子"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From <ipython-input-2-aacae4f72e4c>:1: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "WARNING:tensorflow:From E:\\Anaconda3\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:260: maybe_download (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please write your own downloading logic.\n",
      "WARNING:tensorflow:From E:\\Anaconda3\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting E:\\机器学习-正课\\第七周\\作业\\MNIST_data/train-images-idx3-ubyte.gz\n",
      "WARNING:tensorflow:From E:\\Anaconda3\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting E:\\机器学习-正课\\第七周\\作业\\MNIST_data/train-labels-idx1-ubyte.gz\n",
      "Extracting E:\\机器学习-正课\\第七周\\作业\\MNIST_data/t10k-images-idx3-ubyte.gz\n",
      "Extracting E:\\机器学习-正课\\第七周\\作业\\MNIST_data/t10k-labels-idx1-ubyte.gz\n",
      "WARNING:tensorflow:From E:\\Anaconda3\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:290: DataSet.__init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "(55000, 784)\n",
      "(55000,)\n",
      "(5000, 784)\n",
      "(5000,)\n",
      "(10000, 784)\n",
      "(10000,)\n"
     ]
    }
   ],
   "source": [
    "mnist = input_data.read_data_sets(u\"E:\\\\机器学习-正课\\\\第七周\\\\作业\\\\MNIST_data/\")\n",
    "\n",
    "print(mnist.train.images.shape)\n",
    "print(mnist.train.labels.shape)\n",
    "\n",
    "print(mnist.validation.images.shape)\n",
    "print(mnist.validation.labels.shape)\n",
    "\n",
    "print(mnist.test.images.shape)\n",
    "print(mnist.test.labels.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到images里面有数量不等的图片，每张图片是28x28长度的一个一维向量， 所以用的时候需要先给它还原成28x28的二维图片。labels中则是图片对应的数字的值。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,8))\n",
    "\n",
    "for idx in range(16):\n",
    "    plt.subplot(4,4, idx+1)\n",
    "    plt.axis('off')\n",
    "    plt.title('[{}]'.format(mnist.train.labels[idx]))\n",
    "    plt.imshow(mnist.train.images[idx].reshape((28,28)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接下来，定义用于训练的网络，首先定义网络的输入。\n",
    "\n",
    "这里我们直接使用上面的数据作为输入，所以定义两个placeholder分别用于图像和lable数据，另外，定义一个float类型的变量用于设置学习率。\n",
    "\n",
    "为了让网络更高效的运行，多个数据会被组织成一个batch送入网络，两个placeholder的第一个维度就是batchsize，因为我们这里还没有确定batchsize，所以第一个维度留空。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = tf.placeholder(\"float\", [None, 784])\n",
    "y = tf.placeholder(\"int64\", [None])\n",
    "learning_rate = tf.placeholder(\"float\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "def initialize(shape, stddev=0.1):\n",
    "  return tf.truncated_normal(shape, stddev=0.1)\n",
    "\n",
    "# L1_units_count = 100\n",
    "\n",
    "# W_1 = tf.Variable(initialize([784, L1_units_count]))\n",
    "# b_1 = tf.Variable(initialize([L1_units_count]))\n",
    "# logits_1 = tf.matmul(x, W_1) + b_1\n",
    "# output_1 = tf.nn.relu(logits_1)\n",
    "\n",
    "# L2_units_count = 10 \n",
    "# W_2 = tf.Variable(initialize([L1_units_count, L2_units_count]))\n",
    "# b_2 = tf.Variable(initialize([L2_units_count]))\n",
    "# logits_2 = tf.matmul(output_1, W_2) + b_2  \n",
    "\n",
    "# logits = logits_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 网络层\n",
    "def get_net_logits(lst_L):\n",
    "    for idx,count in enumerate(lst_L):\n",
    "        if idx == 0:\n",
    "            before_count = 784\n",
    "            output_x = x\n",
    "        else:\n",
    "            before_count = lst_L[idx-1]\n",
    "            output_x = output_1\n",
    "        \n",
    "        W_1 = tf.Variable(initialize([before_count, count]))\n",
    "        b_1 = tf.Variable(initialize([count]))\n",
    "        logits_1 = tf.matmul(output_x, W_1) + b_1\n",
    "        output_1 = tf.nn.relu(logits_1)\n",
    "        \n",
    "    return logits_1\n",
    "\n",
    "lst_L = [100, 10] # [500,300,100,50,30,20,10]\n",
    "logits = get_net_logits(lst_L)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接下来定义loss和用于优化网络的优化器。loss计算使用了sparse_softmax_cross_entropy_with_logits, 这样做的好处是labels可以不用手动做one_hot省了一些麻烦。这里使用了sgd优化器，学习率为可以根据需要设定。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 试试看，增大减小学习率，换个优化器再进行训练会发生什么。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "cross_entropy_loss = tf.reduce_mean(\n",
    "    tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=y))\n",
    "\n",
    "optimizer = tf.train.GradientDescentOptimizer(\n",
    "    learning_rate=learning_rate).minimize(cross_entropy_loss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "需要注意的是，上面的网络，最后输出的是未经softmax的原始logits，而不是概率分布， 要想看到概率分布，还需要做一下softmax。\n",
    "\n",
    "将输出的结果与正确结果进行对比，即可得到我们的网络输出结果的准确率。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "pred = tf.nn.softmax(logits)\n",
    "correct_pred = tf.equal(tf.argmax(pred, 1), y)\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "saver用于保存或恢复训练的模型。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "batch_size = 32\n",
    "trainig_step = 5000\n",
    "\n",
    "saver = tf.train.Saver()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "以上定义的所有操作，均为计算图，也就是仅仅是定义了网络的结构，实际需要运行的话，还需要创建一个session，并将数据填入网络中。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 500 training steps, the loss is 0.389551, the validation accuracy is 0.9364\n",
      "after 1000 training steps, the loss is 0.104817, the validation accuracy is 0.9516\n",
      "after 1500 training steps, the loss is 0.290182, the validation accuracy is 0.9546\n",
      "after 2000 training steps, the loss is 0.0810208, the validation accuracy is 0.9638\n",
      "after 2500 training steps, the loss is 0.0104146, the validation accuracy is 0.9698\n",
      "after 3000 training steps, the loss is 0.00598255, the validation accuracy is 0.969\n",
      "after 3500 training steps, the loss is 0.134597, the validation accuracy is 0.9676\n",
      "after 4000 training steps, the loss is 0.127667, the validation accuracy is 0.9718\n",
      "after 4500 training steps, the loss is 0.0781974, the validation accuracy is 0.971\n",
      "the training is finish!\n",
      "the test accuarcy is: 0.9703\n"
     ]
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    sess.run(tf.global_variables_initializer())\n",
    "\n",
    "    #定义验证集与测试集\n",
    "    validate_data = {\n",
    "        x: mnist.validation.images,\n",
    "        y: mnist.validation.labels,\n",
    "    }\n",
    "    test_data = {\n",
    "        x: mnist.test.images, \n",
    "        y: mnist.test.labels\n",
    "    }\n",
    "    \n",
    "    for i in range(trainig_step):\n",
    "        xs, ys = mnist.train.next_batch(batch_size)\n",
    "#         lr = 0.3 * (0.95 ** i)\n",
    "        _, loss = sess.run(\n",
    "            [optimizer, cross_entropy_loss],\n",
    "            feed_dict={\n",
    "                x: xs,\n",
    "                y: ys,\n",
    "                learning_rate: 0.3\n",
    "            })\n",
    "\n",
    "        #每100次训练打印一次损失值与验证准确率\n",
    "        if i > 0 and i % 500 == 0:\n",
    "            validate_accuracy = sess.run(accuracy, feed_dict=validate_data)\n",
    "            print(\n",
    "                \"after %d training steps, the loss is %g, the validation accuracy is %g\"\n",
    "                % (i, loss, validate_accuracy))\n",
    "            saver.save(sess, './model.ckpt', global_step=i)\n",
    "\n",
    "    print(\"the training is finish!\")\n",
    "    #最终的测试准确率\n",
    "    acc = sess.run(accuracy, feed_dict=test_data)\n",
    "    print(\"the test accuarcy is:\", acc)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下面，用我们训练的模型做一个测试。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from ./model.ckpt-900\n",
      "0.9375\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    ckpt = tf.train.get_checkpoint_state('./')\n",
    "    if ckpt and ckpt.model_checkpoint_path:\n",
    "        saver.restore(sess, ckpt.model_checkpoint_path)\n",
    "        final_pred, acc = sess.run(\n",
    "            [pred, accuracy],\n",
    "            feed_dict={\n",
    "                x: mnist.test.images[:16],\n",
    "                y: mnist.test.labels[:16]\n",
    "            })\n",
    "        orders = np.argsort(final_pred)\n",
    "        plt.figure(figsize=(8, 8))\n",
    "        print(acc)\n",
    "        for idx in range(16):\n",
    "            order = orders[idx, :][-1]\n",
    "            prob = final_pred[idx, :][order]\n",
    "            plt.subplot(4, 4, idx + 1)\n",
    "            plt.axis('off')\n",
    "            plt.title('{}: [{}]-[{:.1f}%]'.format(mnist.test.labels[idx],\n",
    "                                                  order, prob * 100))\n",
    "            plt.imshow(mnist.test.images[idx].reshape((28, 28)))\n",
    "\n",
    "    else:\n",
    "        pass"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "以作业提供的参数运行出来的结果，只看上面几个数字还是很不错的，但是总体准确率不太理想。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 心得体会："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.步骤：\n",
    "     先定义变量 X, y, lr\n",
    "     生成网络结构\n",
    "     使用优化器\n",
    "     使用softmax得到最后的得分\n",
    "     保存"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
